package com.platform.admin.designPattern.statusMachine.model;

import com.platform.admin.designPattern.statusMachine.enums.PaymentEventEnum;
import com.platform.admin.designPattern.statusMachine.enums.PaymentStatusEnum;
import com.platform.admin.designPattern.statusMachine.exception.StateMachineException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.Objects;

@Api(tags = "支付单模型类")
public class PaymentModel {

  /** 其他所有字段省略 */

  /** 上次状态 */
  private PaymentStatusEnum lastStatus;

  /** 当前状态 */
  private PaymentStatusEnum currentStatus;

  @ApiOperation(value = "根据事件推进状态")
  public void transferStatusByEvent(PaymentEventEnum event) {
    // 根据当前状态和事件，去获取目标状态
    PaymentStatusEnum targetStatus = PaymentStatusEnum.getTargetStatus(currentStatus, event);
    // 如果目标状态不为空，说明是可以推进的
    if (Objects.nonNull(targetStatus)) {
      lastStatus = currentStatus;
      currentStatus = targetStatus;
    } else {
      // 目标状态为空，说明是非法推进，进入异常处理，这里只是抛出去，由调用者去具体处理
      throw new StateMachineException("状态转换失败");
    }
  }
  
}
